#include <glib.h>

static gint _array_cmp_func(gconstpointer a, gconstpointer b)
{
    gint x, y;

    x = *(gint *)a;
    y = *(gint *)b;

    return (x > y ? +1 : x == y ? 0 : -1);
}

gint main(gint argc, gchar **argv)
{
    GArray *arr = NULL;
    gint i = 0;
    gint x = 0;

    arr = g_array_new(FALSE, FALSE, sizeof(gint));

    x = 1;
    g_array_append_val(arr, x);
    x = 5;
    g_array_append_val(arr, x);
    x = 3;
    g_array_append_val(arr, x);

    for(i=0; i<arr->len; i++) {
        g_print("arr[%d]:%d(addr:%p) \n", i, g_array_index(arr, gint, i), &g_array_index(arr, gint, i));
    }

    g_array_sort(arr, _array_cmp_func);

    for(i=0; i<arr->len; i++) {
        g_print("arr[%d]:%d(addr:%p) \n", i, g_array_index(arr, gint, i), &g_array_index(arr, gint, i));
    }

    g_array_free(arr, TRUE);

    return 0;
}